def push_positions(context):
    """
    推送持仓信息到 Redis 服务器
    策略的买卖交易完成后调用
    """
    # 创建 Redis 客户端连接，连接到 localhost 的 Redis 服务器，端口 6379，无密码，使用 db 0
    redis_client = redis.Redis(host='localhost', port=6379, password='', db=0)
    
    # 初始化一个字典，用于存储证券代码及其对应的持仓比例
    positions = {}
    
    # 获取当前投资组合的净值（总资产价值），取第一个子投资组合的净值
    total_value = context.portfolio.subportfolios[0].net_value
    
    # 遍历投资组合中的所有持仓证券
    for security in context.portfolio.positions:
        # 对于每个证券，生成一个标准化的证券代码
        # security 是证券的原始代码，例如 "000001.XSHE"，截取前7位字符，然后根据末尾字符判断属于哪个交易所 ('G' 表示上证，其他表示深证，假设证券代码的末尾有一个标识符)
        # 例如，security = "000001.G" -> code = "000001SH"，security = "000001.X" -> code = "000001SZ"
        code = security[:7] + ('SH' if security[-1] == 'G' else 'SZ')
        
        # 获取该证券的持仓信息（如持仓市值、份额等）
        pos_info = context.portfolio.positions[security]
        
        # 获取该证券的市值（持仓价值）
        p_value = pos_info.value
        
        # 计算该证券的持仓比例（持仓市值 / 投资组合净值），四舍五入到小数点后两位
        p_pct = round(p_value / total_value, 2)
        
        # 将证券代码和持仓比例存入字典
        positions[code] = p_pct
    
    # 创建一个空字典，占位符（暂时未使用）
    # ******_order = {}
    
    # 获取当前时间的日期部分，格式化为 "YYYYMMDD" 字符串
    date_str = context.current_dt.date().strftime("%Y%m%d")
    
    # 将持仓字典转换为 JSON 格式的字符串
    json_data = json.dumps(positions)
    
    # 将 JSON 数据存入 Redis，键名为 "position-date_str"，例如 "position-20250225"
    redis_client.set(f'position-{date_str}', json_data)
    
    # 关闭 Redis 客户端连接池（可选，Redis 的连接池会自动管理连接）
redis_client.connection_pool.disconnect()